CREATE OR REPLACE EDITIONABLE FUNCTION "SCOTT"."FNC_SPLIT" (p_str       IN VARCHAR2,
                                     p_delimiter IN VARCHAR2)
/* 功能描述：用指定分隔符(p_delimiter)切割输入的字符串(p_str)，返回一维数组，每个数组元素为一个子串。 */
 RETURN t_str_split IS
    j         INT := 0;
    i         INT := 1;
    len       INT := 0;
    len1      INT := 0;
    str       VARCHAR2(32767);
    str_split t_str_split := t_str_split();
BEGIN
    len  := LENGTH(p_str);
    len1 := LENGTH(p_delimiter);

    WHILE j < len LOOP
        j := INSTR(p_str, p_delimiter, i);

        IF j = 0 THEN
            j   := len;
            str := SUBSTR(p_str, i);
            str_split.EXTEND;
            str_split(str_split.COUNT) := str;

            IF i >= len THEN
                EXIT;
            END IF;
        ELSE
            str := SUBSTR(p_str, i, j - i);
            i   := j + len1;
            str_split.EXTEND;
            str_split(str_split.COUNT) := str;
        END IF;
    END LOOP;

    RETURN str_split;
END fnc_split;